package com.gouying.web.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gouying.common.utils.PageUtils;
import com.gouying.web.entity.AttrAttrgroupRelationEntity;
import com.gouying.web.entity.CategoryEntity;
import com.gouying.web.vo.AttrGroupRelationVo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gouying.web.vo.Catalog2Vo;

import java.util.List;
import java.util.Map;

/**
 * 商品三级分类
 *
 * @author ly
 * @date 2019-10-01 21:08:48
 */
public interface CategoryService extends IService<CategoryEntity> {
    /**
     * 分页查询
     *
     * @param params 查询条件
     * @return 分页数据
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 以树的形式将从数据库中获取的商品分类信息进行组装，并返回给前端
     *
     * @return 分类
     */
    List<CategoryEntity> listWithTree();

    void removeMenuByIds(List<Long> asList);

    /**
     * 找到catalogId的完整路径
     * [父/子/孙]
     *
     * @param catalogId 分类id
     * @return 该分类的完整路径
     */
    Long[] findCatalogPath(Long catalogId);

    /**
     * 修改了分类菜单数据，分别更新以及菜单和三级分类的两个方法缓存的数据
     *
     * @param category 待更新的分类
     */
    void updateCascade(CategoryEntity category);

    /**
     * 查询一级分类
     * 每一个需要缓存的数据我们来指定要放到那个名字的缓存。【缓存的分区(按照业务类型分)】
     * 代表当前方法的结果需要缓存，如果缓存中有，方法不用调用。
     * 如果缓存中没有，会调用方法，最后将方法的结果放入缓存
     *
     * @return
     */
    List<CategoryEntity> getLevel1Category();

    Map<String, List<Catalog2Vo>> getCatalogJson();
}

